#include <iostream>
using namespace std;

#include <unistd.h>
#include <sys/wait.h>
#include <sys/types.h>




// //进程替换
// int main()
// {
//     //int n = execl("/usr/bin/ls","ls","-a","-l",nullptr);
//     int n = execlp("ls","ls","-a","-l",nullptr);
//     if(n < 0)
//         cout << "exec failed" << endl;


//     return 0;
// }

// int main()
// {
//     pid_t pid = fork();
//     if(pid == 0)
//     {
//         //child
//         int cnt = 5;
//         while(cnt--)
//         {
//             //int* p = nullptr;
//             //*p = 2;
//             cout << "i am child " << endl;
//             sleep(1);
//         }
//         exit(1);//子进程退出
//     }

//     //parent
//     while(1)
//     {
//         int status = 0;
//         pid_t id = waitpid(pid,&status,WNOHANG); //轮询
        
//         //等待成功
//         if(id  > 0)
//         {
//              cout << "wait success,exit code:" << ((status>>8) & 0xff) << "signal:" << (status & 0x7f) << endl;
//              break;
//         }
//         else if(id == 0)
//         {
//             //子进程没有退出，waitpid调用成功
//             cout << "child running" << endl;
//             //可以执行其他任务
//         }
//         else 
//         {
//             //等待失败，等待的进程并不是当前进程的子进程
//             cout << "wait fail" << endl;
//         }
//         sleep(1);
//     }




    // //parent
    // sleep(7); //子进程退出两秒后，对子进程进行回收
    // int status = 0;
    // pid_t ret = waitpid(pid,&status,0);
    // //pid_t id = wait(nullptr);
    // if(ret > 0)
    //     //cout << "wait success:" << id << endl; 
    //     cout << "wait success,exit code:" << ((status>>8) & 0xff) << "signal:" << (status & 0x7f) << endl;
    // //观察进程信息    
    // sleep(4); 

//     return 0;
// }